Ink jet printers serially scan a print head across a page in both left to right and right to left directions. In most ink jet printers, printing occurs in both scan directions. A widely used ink jet printhead includes a plurality of vertically oriented nozzles that are thermally actuated by appropriate pixel image-driven signals. Many popular ink jet printheads employ two vertically oriented rows of nozzles with one row being offset by half a line from the other row so as to enable highly dense ink jet dot patterns (e.g. 300 to 600 dots per inch). In FIG. 1, a schematic is shown of a sample nozzle arrangement that includes four parallel columns of nozzle pairs 10, 12, 14 and 16. Each column of nozzles is shown schematically by a vertical line. Each column of nozzles includes Y nozzles, where Y, for instance, may be 150. Nozzle pair 10 is employed to print black images and nozzle pairs 12, 14 and 16 are employed to print cyan, magenta and yellow images, respectively.
During printing, nozzle pairs 10, 12, 14 and 16 are moved across a page, in tandem, so as to enable multiple dot colors to be laid down. Each time the printhead is moved across a page, a swath of pixel/dot data is printed. Raster data for the printhead is stored in a random access memory (RAM) in horizontal raster form. The data in RAM is typically the full height of the printhead (Y rows of pixel data) and the RAM is sufficiently large to hold a full page-width swath. The allocated RAM size is often made twice the height of the printhead to enable buffering of a next print swath. As print engine designs allow for increased print resolution and larger values of Y, the amount of swath RAM increases--resulting in increased memory cost.
Various techniques in the prior art enable reduction of the amount of RAM required to store pixel data for an ink jet printer. One technique sends the data from a host processor to the printer in a columnar format that corresponds to the printhead swath height. This technique has the disadvantage of requiring the host processor's printer driver to recognize the printhead's configuration. However, most widely used printer driver languages are device--independent and do not include a capability for recognizing printhead configuration.
A further alternative to increasing the amount of RAM is to compress the swath memory, using a conventional compression algorithm, such as run--length encoding. The problem with such a compression method is, in general, that data can only be decompressed in the same order in which it was compressed. Thus, because the ink jet printhead prints in two directions, decoding must be handled differently for the direction that is in opposition to the direction in which the data was compressed. However, it isn't known in which direction the printhead will be traveling until after logic in the printer determines required margin positions for a number of contiguous rows. Such logic cannot be implemented until considerable data is brought into the swath RAM. Thus, if it is desired to reduce the amount of such data by compression, and it is compressed, such compression cannot occur until margin determination has occurred--to enable bilateral decoding of the compressed data. Thus, a "catch 22" situation occurs.
Margin determination on a page enables an ink jet printhead to be positioned at the beginning of a print line and thus assures a more rapid print operation. As shown in FIG. 2, a first print swath on a page 20 begins at point 22. During the time the printhead moves from left to right across page 20 and reaches the end of the line at point 24, logic determines where next line 28 begins (e.g. at point 26). The line beginning is determined from the initial dot of the right-most print position 26 of next line 28--as determined from a second swath stored in RAM. Thus, the control mechanism for the printhead causes the printhead to continue moving in a rightward direction after point 24 until its print nozzles are aligned with point 26 so that when page 22 is incremented, point 26 is below the printhead and printing can immediately start.
The prior art has derived a number of methods for matching data compression algorithms with bidirectional printing. U.S. Pat. No. 4,568,983 to Bobick describes a data compression/decompression technique for a laser printer wherein a document is divided into a plurality of strips, each strip representing plurality of scanned lines. Each strip comprises columns of words which are compressed using either run-length or Huffman encoding. Because such encoding techniques are difficult to decompress in a direction opposite to that in which they were compressed, the Bobick system requires additional processing overhead to cope with the opposite direction decompression.
A further prior art procedure--as evidenced in U.S. Pat. No. 5,123,061 to the inventor hereof (and assigned to the same Assignee as this application) teaches that each horizontal row of swath raster data is compressed individually, based upon a proceeding row's values. Thus the method compares a first row of raster data with a second row. If the second row is identical to the first row, then the first row is stored and a flag signals the identity of the second row to the first row. If the first row is a reference row (e.g. all zeros), only the flag needs to be stored.
U.S. patent application Ser. No. 08/171,315, entitled "A Reversible Video Compression Method" to Morrison et al. (assigned to the same Assignee as this application) describes a further compression procedure. The Morrison et al. method compresses a row of pixel data in a first direction. When the compressed swath of raster data needs to be decompressed in a direction opposite to that in which it was compressed, the decompression procedure operates on a pixel row by pixel row basis and steps backwardly through the compressed data on a data segment by data segment basis. Each data segment is decompressed in the direction in which it was compressed, and the procedure repeats for the next data segment, etc.
To the present, there are no known compression/decompression procedures which will support bidirectional operation of an ink jet printer. Past solutions have required use of uncompressed pixel data. As the complexity of ink jet printheads increase (e.g. multicolor ink jet nozzle configurations, increased numbers of nozzles, higher resolution dot configurations), additional RAM is required to store increased quantities of the uncompressed pixel data.
Accordingly, it is an object of this invention to provide a data compression and decompression procedure for an ink jet printer whereby high speed bidirectional printing is enabled.
It is another object of this invention to provide a data compression/decompression procedure which enables a wide swath of pixel data to be rapidly compressed without requiring a large array of dedicated compression hardware.
It is yet another object of this invention to provide an improved ink jet printer apparatus that enables parallel compression/decompression of a swath of raster data in a manner to enable raster memory minimization and bidirectional printhead operation.